package com.monkeyboy.rabbitmq.simple;

import com.monkeyboy.rabbitmq.RabbitmqConnectionUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

/**
 * 作用： 生产者生产消息
 * 
 * @author Gavin
 * @time:2018年10月24日
 */
public class Producer {
	private final static String QUEUE_NAME = "test_queue";
	private final static String ROUTINT_KEY = "test_queue";

	public static void main(String[] args) throws Exception {
		// 获取到连接一级mq通道(相当于mysql获取连接)
		Connection connection = RabbitmqConnectionUtil.getConnection();
		// 从连接中创建通道(相当于mysql获取连接后还得获取到statement才能操作数据库一样的道理)
		Channel channel = connection.createChannel();

		/*
		 * 接下来就是通过通道来进行一系列的操作（相当于用mysql获取到statement对象后就可以进行增上改查）
		 */
		// 声明（创建）队列【相当于mysql数据库中的表，用来存数据】(用来接受消息，生产者---》发送消息到队列《------消费者消费消息)
		channel.queueDeclare(QUEUE_NAME, false, false, false, null);

		// 生产的消息内容【相当于生产者生产消息】
		String message = "Hello World";
		for (int i = 0; i < 10; i++) {
			// 发送到队列中 参数(交换机，routingKey，附加属性，消息)
			/**
			 * 注意，没有交换机消息是不能发送的，这儿指定交换机的名字为空时，rabbit会默认用 （AMQP
			 * default）这个内部交换机【管理界面中可以发现这个交换机的存在】 {这个默认交换机的路由规则就是：
			 * 查看rabbitmq中有不有和该routeing_key相同名字的队列名，如果有那么也能够成功的路由过去 }
			 */
			channel.basicPublish("", ROUTINT_KEY, null, message.getBytes());
			System.out.println("send----->" + message + "[" + i + "]");
		}
		// 关闭通道和连接
		channel.close();
		connection.close();
	}
}
